// 自己定义:保存token
// 导入获取token的方法
import {
  getToken,
  setToken,
  removeToken,
  setTimeStamp,
  removeTimeStamp
} from '@/utils/auth.js'

import {
  getBaseInfoApi
} from '@/api/employees'

// 导入网络请求
import {
  loginApi,
  getInfoApi
} from '@/api/user'
// import {
//   config
// } from '@vue/test-utils';

// 存储token
// 如果在cookies中已经有了，直接读取出来
const state = {
  token: getToken(),
  // 用户信息，给的是空对象，不建议为null,因为有可能造成代码的错误
  userInfo: {}
}
// 保存token
const mutations = {

  SET_TOKEN(state, payload) {
    // 保存到vuex中
    state.token = payload;
    // 保存到cookies中
    setToken(payload)
    // 顺便保存当前的时间戳
    setTimeStamp()

  },
  REMOVE_TOKEN(state, payload) {
    state.token = '',
      // 清除token
      removeToken(),
      // 清除token的时间戳
      removeTimeStamp()
  },
  //保存用户信息
  SET_USERINFO(state, payload) {
    state.userInfo = payload
  },
  // 清除用户信息
  REMOVE_USERINFO(state) {
    state.userInfo = {}

  }

}

const actions = {
  // 保存token
  async login(context, payload) {
    const res = await loginApi(payload)
    context.commit('SET_TOKEN', res.data)
  },
  // 得到用户信息
  async getUserInfo(context) {
    // 发送请求得到用户信息
    const res = await getInfoApi()
    // console.log(res);
    // 获取员工的基本信息
    const baseRes = await getBaseInfoApi(res.data.userId)
    // console.log(baseRes);
    // 保存用户信息   // 将两条数据合并到userInfo中
    context.commit('SET_USERINFO', {
      ...res.data,
      ...baseRes.data
    })
    // 返回用户信息
    return res
  },
  // 退出登录
  logout(context) {
    // 删除用户token
    context.commit('REMOVE_TOKEN')
    // 删除用户信息：userinfo
    context.commit('REMOVE_USERINFO')
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions,
}
